//!
/**
 ***********************************************************************************************************
 * <RBVertexElement Implementation>
 ***********************************************************************************************************
 * @file RBVertexElement.cpp
 ***********************************************************************************************************/

/***********************************************************************************************************
 * Precompiled Header
 ***********************************************************************************************************/
#include "RBMainPCH.h"

/***********************************************************************************************************
 * Includes
 ***********************************************************************************************************/
#include "RBVertexElement.h"
#include "RBStream.h"

/***********************************************************************************************************
 * Defines
 ***********************************************************************************************************/

/***********************************************************************************************************
 * Classes implementation
 ***********************************************************************************************************/

/**
 ***********************************************************************************************************
 * Constructor
 ***********************************************************************************************************/
RBVertexElement::RBVertexElement(uint8 uiStream, EType eType, EUsage eUsage, uint32 uiSize)
: Stream    (uiStream)
, Type      (eType)
, Usage     (eUsage)
, Size      (uiSize)
{
}

/**
 ***********************************************************************************************************
 * Destructor
 ***********************************************************************************************************/
RBVertexElement::~RBVertexElement()
{
}

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
void RBVertexElement::Save(RBStream& kStream)
{
    kStream << Stream;
    kStream << Type;
    kStream << Usage;
    kStream << Size;
}

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
void RBVertexElement::Load(RBStream& kStream)
{
    kStream >> Stream;
    kStream >> Type;
    kStream >> Usage;
    kStream >> Size;
}

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
const char* RBVertexElement::GetUsageName( EUsage eUsage )
{
    switch (eUsage)
    {
    case VEU_POSITION: return "POSITION";
    case VEU_BLENDWEIGHTS: return "BLENDWEIGHTS";
    case VEU_BLENDINDICES: return "BLENDINDICES";
    case VEU_NORMAL: return "NORMAL";
    case VEU_TEXCOORD: return "TEXCOORD";
    case VEU_TANGENT: return "TANGENT";
    case VEU_BITANGENT: return "BITANGENT";
    case VEU_COLOR: return "COLOR";
    case VEU_EXTRA: return "EXTRA";
    default: return "";
    }

}
/***********************************************************************************************************/
